package leetcode.top100;

/**
 *两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
 *
 * 给出两个整数 x 和 y，计算它们之间的汉明距离。
 *
 * 注意：
 * 0 ≤ x, y < 231.
 *
 * 示例:
 *
 * 输入: x = 1, y = 4
 *
 * 输出: 2
 *
 * 解释:
 * 1   (0 0 0 1)
 * 4   (0 1 0 0)
 *        ↑   ↑
 *
 * 上面的箭头指出了对应二进制位不同的位置。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/hamming-distance
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @since 2019/12/18 0018 下午 11:05
 */
public class Code461_HanMingDistance_汉明距离 {
    public static void main(String[] args) {
        System.out.println(hammingDistance(1, 4));
    }
    public static int hammingDistance(int x, int y) {
        if(x < 0 || y < 0) return -1;
//        return process1(x,y);
        //方式2：用Integer自带的bitCount统计某个数字bit位为1的个数
        return Integer.bitCount(x^y);
    }
    //两者异或，不同位置的数字对应为1.然后统计1个数
    private static int process1(int x, int y){
        x = x ^ y;
        int count = 0;
        while(x != 0){
            //判断最后一位是否是1
            if((x & 1) == 1) count ++;
            x = x >> 1;
        }
        return count;
    }
}
